#include <bits/stdc++.h>
using namespace std;
const int inf = 1000000001;
int main() {
  int n, m, l;
  cin >> n >> m >> l;
  vector<int> a(n);
  for (int i = 0; i < n; i++)
    cin >> a[i];

  vector<int> dp(m, inf);
  dp[0] = 0;
  for (int i = 0; i < l; i++) { // 枚举分组的起始位置

    vector<int> ep(m, inf);

    for (int j = 0; j < m; j++) { // 枚举模M的余数
      int cost = 0;

      // 注意 k+=l 如何分组的。遍历组内所有元素（A_i, A_{i+L}, A_{i+2L}, ...）
      for (int k = i; k < n; k += l) {
        // 计算将a[k]调整为j  的操作数（题解中“最小操作数”）
        if (j >= a[k])
          cost += j - a[k];
        else
          cost += j - a[k] + m;
      }

      /*
        dp[i][j] = min(dp[i][j], dp[i - 1][(j - k + m) % m] + cost);
      */
      for (int k = 0; k < m; k++)
        min(ep[(k + j) % m], dp[k] + cost);
    }
    dp = move(ep);
  }
  cout << dp[0] << '\n';
}